<!DOCTYPE html>
<html lang="it">
	<head>
		<meta charset="utf-8" />
		<base href="../../../" />
		<script src="page.js"></script>
		<link type="text/css" rel="stylesheet" href="page.css" />
	</head>
	<body>
		<h1>[name]</h1>

		<p class="desc">
      AnimationAction pianifica l'esecuzione delle animazioni archiviate in
      [page:AnimationClip AnimationClips].<br /><br />

      Nota: La maggior parte dei metodi di AnimationAction può essere concatenata.

      Per una paronamica dei diversi elementi del sistema di animazione di three.js consultare
      l'articolo "Sistema di animazione" nella sezione "Prossimi Passi" del manuale.
		</p>


		<h2>Costruttore</h2>


		<h3>[name]( [param:AnimationMixer mixer], [param:AnimationClip clip], [param:Object3D localRoot] )</h3>
		<p>
			[page:AnimationMixer mixer] - l'`AnimationMixer` controllato da questa azione.<br />
			[page:AnimationClip clip] - l'`AnimationClip` che contiene i dati di animazione per questa azione.<br />
			[page:Object3D localRoot] - l'oggetto root su cui viene eseguita questa azione.<br /><br />

      Nota: Invece di chiamare questo costruttore direttamente, dovresti creare un'istanza AnimationAction con
      [page:AnimationMixer.clipAction] poiché questo metodo fornisce la memorizzazione nella cache per migliorare
      le prestazioni.
		</p>


		<h2>Proprietà</h2>


		<h3>[property:Boolean clampWhenFinished]</h3>
		<p>
      Se `clampWhenFinished` è impostato a true l'animazione verrà automaticamente messa in [page:.paused pausa]
      sull'ultimo frame.<br /><br />

      Se `clampWhenFinished` è impostato a false, [page:.enabled enabled] verrà automaticamente impostato a false
      al termine dell'ultimo ciclo di animazione, in modo che questa azione non abbia più alcun impatto.<br /><br />

      Il valore di default è false.<br /><br />

      Nota: `clampWhenFinished` non ha impatto se l'azione viene interrotta (ha effetto solo se il suo ultimo ciclo
      è effettivamente terminato).
		</p>

		<h3>[property:Boolean enabled]</h3>
		<p>
      Impostare `enabled` a `false` disabilita questa azione, in modo che non abbia più alcun impatto. Il valore di default è `true`. <br /><br />

      Quando l'azione viene riattivata (re-enabled), l'animazione continua dal [page:.time tempo] corrente 
      (impostare `enabled` a `false` non resetta l'azione). <br /><br />

      Nota: Impostare `enabled` a `true` non riavvia automaticamente l'azione. Impostare `enabled` a `true`
      farà riavviare l'animazione immediatamente solo se è soddisfatta la seguente condizione:
      [page:.paused paused] è `false`, l'azione non è stata disattivata nel frattempo 
      (eseguendo un comando di [page:.stop stop] o [page:.reset reset]) e né [page:.weight weight] né 
      [page:.timeScale timeScale] sono pari a `0`.
		</p>

		<h3>[property:Number loop]</h3>
		<p>
      La modalità di looping può essere modificata con [page:.setLoop setLoop]. L'impostazione predefinita è
      [page:Animation THREE.LoopRepeat] (con un numero infinito di [page:.repetitions ripetizioni])<br /><br />

      Il valore deve essere una di queste costanti:<br /><br />
      [page:Animation THREE.LoopOnce] - riproduce il clip una volta,<br />
			[page:Animation THREE.LoopRepeat] - riproduce il clip con il numero di `ripetizioni` prescelto, 
      ogni volta saltando dalla fine della clip direttamente al suo inizio,<br />
			[page:Animation THREE.LoopPingPong] - riproduce il clip con il numero di `ripetizioni` prescelto,
      alternativamente in avanti e in indietro. 
		</p>

		<h3>[property:Boolean paused]</h3>
		<p>
      Impostando `paused` a `true` l'azione verrà sospesa impostando il time scale effettivo a `0`. Il valore di default è `false`.
		</p>

		<h3>[property:Number repetitions]</h3>
		<p>
      Il numero di ripetizioni dell'[page:AnimationClip] eseguite nel corso di questa azione.
      Può essere settato tramite [page:.setLoop setLoop]. Il valore di default è `Infinity`.<br /><br />
      Se la modalità di [page:loop looping] è impostata a [page:Animation THREE.LoopOnce], impostare questo valore non ha effetti.
		</p>

		<h3>[property:Number time]</h3>
		<p>
      L'ora locale di questa azione (in secondi, partendo da `0`).<br /><br />

      Il valore viene bloccato a `0...clip.duration` (in base allo stato del ciclo). Può essere scalato
      rispetto al tempo globale del mixer modificando [page:.timeScale timeScale] (utilizzando 
      [page:.setEffectiveTimeScale setEffectiveTimeScale] o [page:.setDuration setDuration]). <br />
		</p>

		<h3>[property:Number timeScale]</h3>
		<p>
      Fattore di scala per il [page:.time tempo]. Un valore uguale a `0` mette in pausa l'azione. Valori 
      negativi fanno sì che l'animazione venga riprodotta all'indietro. Il valore di default è `1`. <br /><br />
      Le proprietà/metodi relativi a `timeScale` (rispettivamente `time`) sono:
      [page:.getEffectiveTimeScale getEffectiveTimeScale],
			[page:.halt halt],
			[page:.paused paused],
			[page:.setDuration setDuration],
			[page:.setEffectiveTimeScale setEffectiveTimeScale],
			[page:.stopWarping stopWarping],
			[page:.syncWith syncWith],
			[page:.warp warp].
		</p>

		<h3>[property:Number weight]</h3>
		<p>
      Il grado di influenza di questa azione (nell'intervallo `[0, 1]`). I valori tra `0` (nessun impatto)
			e 1 (impatto totale) possono essere usati per combinare più azioni. Il valore di default è `1`. <br /><br />
      Le proprietà/metodi relativi a `weight` sono:
      [page:.crossFadeFrom crossFadeFrom],
			[page:.crossFadeTo crossFadeTo],
			[page:.enabled enabled],
			[page:.fadeIn fadeIn],
			[page:.fadeOut fadeOut],
			[page:.getEffectiveWeight getEffectiveWeight],
			[page:.setEffectiveWeight setEffectiveWeight],
			[page:.stopFading stopFading].
		</p>

		<h3>[property:Boolean zeroSlopeAtEnd]</h3>
		<p>
      Abilita l'interpolazione uniforme senza clip separati per inizio, loop e fine. Il valore di default è `true`.
		</p>

		<h3>[property:Boolean zeroSlopeAtStart]</h3>
		<p>
      Abilita l'interpolazione uniforme senza clip separati per inizio, loop e fine. Il valore di default è `true`.
		</p>


		<h2>Metodi</h2>


		<h3>[method:this crossFadeFrom]( [param:AnimationAction fadeOutAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )</h3>
		<p>
      Provoca il [page:.fadeIn fade in] (la dissolvenza in entrata) di questa azione, e la dissolvenza in uscita di un'altra azione 
      simultaneamente, entro l'intervallo passato. Questo metodo può essere concatenato.<br /><br />

      Se warpBoolean è true, verranno applicati ulteriori [page:.warp warping] (modifiche graduali delle scale temporali).<br /><br />

      Nota: Come con `fadeIn`/`fadeOut`, la dissolvenza inizia/termina con un weight di 1.
		</p>

		<h3>[method:this crossFadeTo]( [param:AnimationAction fadeInAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )</h3>
		<p>
      Provoca il [page:.fadeOut fade out] (la dissolvenza in uscita) di questa azione, e la dissolvenza in entrata di un'altra azione 
      simultaneamente, entro l'intervallo passato. Questo metodo può essere concatenato.<br /><br />

      Se warpBoolean è true, verranno applicati ulteriori [page:.warp warping] (modifiche graduali delle scale temporali).<br /><br />

      Nota: Come con `fadeIn`/`fadeOut`, la dissolvenza inizia/termina con un weight di 1.
		</p>

		<h3>[method:this fadeIn]( [param:Number durationInSeconds] )</h3>
		<p>
      Aumenta il [page:.weight weight] di questa azione gradualmente da `0` a `1`, entro l'intervallo passato.
      Questo metodo può essere concatenato.
		</p>

		<h3>[method:this fadeOut]( [param:Number durationInSeconds] )</h3>
		<p>
      Diminuisce il [page:.weight weight] di questa azione gradualmente da `1` a `0`, entro l'intervallo passato.
      Questo metodo può essere concatenato.
		</p>

		<h3>[method:Number getEffectiveTimeScale]()</h3>
		<p>
      Restituisce l'effettivo time scale (considerando lo stato attuale di [page:.warp warping] e di [page:.paused paused]).
		</p>

		<h3>[method:Number getEffectiveWeight]()</h3>
		<p>
      Restituisce l'effettivo weight (considerando lo stato attuale di fading e di [page:.enabled enabled]).
		</p>

		<h3>[method:AnimationClip getClip]()</h3>
		<p>
      Restituisce la clip che contiene i dati di animazione di questa azione.
		</p>

		<h3>[method:AnimationMixer getMixer]()</h3>
		<p>
      Restituisce il mixer responsabile dell'esecuzione di questa azione.
		</p>

		<h3>[method:Object3D getRoot]()</h3>
		<p>
      Restituisce l'oggetto root sul quale questa animazione è eseguita.
		</p>

		<h3>[method:this halt]( [param:Number durationInSeconds] )</h3>
		<p>
      Decelera la velocità di questa animazione a `0` diminuendo gradualmente il [page:.timeScale timeScale] 
      (a partire dal valore corrente), entro l'intervallo passato. Questo metodo può essere concatenato.
		</p>

		<h3>[method:Boolean isRunning]()</h3>
		<p>
      Restituisce true se il [page:.time time] dell'azione è attualmente in esecuzione.<br /><br />

      Oltre ad essere attivato nel mixer (vedi [page:.isScheduled isScheduled]) le seguenti condizioni devono essere soddisfatte:
      [page:.paused paused] deve essere uguale a false, [page:.enabled enabled] deve essere uguale a true,
      [page:.timeScale timeScale] deve essere diversa da `0`, e non deve essere prevista nessuna programmazione
      per un avvio ritardato ([page:.startAt startAt]).<br /><br />

      Nota: il fatto che `isRunning` sia true non significa necessariamente che l'animazione sia effettivamente visibile.
      Ciò avviene solo se [page:.weight weight] è impostato su un valore diverso da zero.
		</p>

		<h3>[method:Boolean isScheduled]()</h3>
		<p>
      Restituisce true se questa azione è attivata nel mixer.<br /><br />
      Nota: Questo non significa necessariamente che l'animazione sia effettivamente in esecuzione (confronta
      le condizioni aggiuntive per [page:.isRunning isRunning]).
		</p>

		<h3>[method:this play]()</h3>
		<p>
      Dice al mixer di attivare l'azione. Questo metodo può essere concatenato.<br /><br />

      Nota: Attivare questa azione non significa necessatiamente che l'animazione verrà avviata immediatamente:
      Se l'azione era già terminata prima (raggiungendo la fine del suo ultimo loop), o se è stato impostato un tempo
      per un inizio ritardato (tramite [page:.startAt startAt]), prima deve essere eseguito un [page:.reset reset].
      Anche altre impostazioni, (come [page:.paused paused]=true, [page:.enabled enabled]=false,
			[page:.weight weight]=0, [page:.timeScale timeScale]=0) possono impedire la riproduzione dell'animazione.
		</p>

		<h3>[method:this reset]()</h3>
		<p>
      Reimposta l'azione. Questo metodo può essere concatenato.<br /><br />

      Questo metodo imposta [page:.paused paused] a false, [page:.enabled enabled] a true,
      [page:.time time] a `0`, interrompe ogni fading e wraping programmati, e rimuove il conteggio del loop 
      interno per l'avvio ritardato.<br /><br />

      Nota: .`reset` è sempre chiamato da [page:.stop stop], ma .`reset` non chiama .`stop`.
      Questo significa che se vuoi chiamare entrambi i metodi, non chiamare .`reset`, chiama invece .`stop`.
		</p>

		<h3>[method:this setDuration]( [param:Number durationInSeconds] )</h3>
		<p>
      Imposta la durata per un singolo loop dell'azione (regolando il [page:.timeScale timeScale] e 
      interrompendo qualsiasi warping programmato). Questo metodo può essere concatenato.
		</p>

		<h3>[method:this setEffectiveTimeScale]( [param:Number timeScale] )</h3>
		<p>
      Imposta il [page:.timeScale timeScale] e interrompe qualsiasi warping programmato. Questo metodo può essere concatenato.<br /><br />

      Se [page:.paused paused] è false, l'effettivo time scale (una proprietà interna) sarà impostato a questo valore, 
      altrimenti il time scale effettivo (che influenza direttamente l'animazione in questo momento) verrà impostato a `0`.<br /><br />

      Nota: Se .`timeScale` è impostato `0` da questo metodo, .`paused` non verrà impostato automaticamente a `true`.
		</p>

		<h3>[method:this setEffectiveWeight]( [param:Number weight] )</h3>
		<p>
      Imposta il [page:.weight weight] e interrompe qualsiasi fading programmato. Questo metodo può essere concatenato.<br /><br />

      Se [page:.enabled enabled] è true, l'effettivo weight (una proprietà interna) sarà impostato a questo valore, 
      altrimenti il weight effettivo (che influenza direttamente l'animazione in questo momento) verrà impostata a `0`.<br /><br />

      Nota: Se .`weight` è impostato `0` da questo metodo, .`enabled` non passerà automaticamente a `false`.
		</p>

		<h3>[method:this setLoop]( [param:Number loopMode], [param:Number repetitions] )</h3>
		<p>
      Imposta la modalità di [page:.loop looping] e il numero di [page:.repetitions ripetizioni]. Questo metodo può essere concatenato.
		</p>

		<h3>[method:this startAt]( [param:Number startTimeInSeconds] )</h3>
		<p>
      Definisce il tempo per un avvio ritardato (solitamente passato come [page:AnimationMixer.time] +
			deltaTimeInSeconds). Questo metodo può essere concatenato.<br /><br />

      Nota: L'animazione inizierà solo all'ora indicata se .`startAt` è concatenato con
			[page:.play play], o se l'azione è già stata attivata nel mixer (da una precedente chiamata di .`play`, 
      senza che nel frattempo sia stata fermata o resettata).
		</p>

		<h3>[method:this stop]()</h3>
		<p>
      Dice al mixer di disattivare questa azione. Questo metodo può essere concatenato.<br /><br />

      L'azione verrà immediatamente interrotta e completamente [page:.reset resettata].<br /><br />

      Nota: puoi interrompere tutte le azioni attive sullo stesso mixer in una volta sola tramite 
      [page:AnimationMixer.stopAllAction mixer.stopAllAction].
		</p>

		<h3>[method:this stopFading]()</h3>
		<p>
      Interrompe qualsiasi [page:.fadeIn fading] programmato applicato a questa azione. Questo metodo può essere concatenato.
		</p>

		<h3>[method:this stopWarping]()</h3>
		<p>
      Interrompe qualsiasi [page:.warp warping] programmato applicato a questa azione. Questo metodo può essere concatenato.
		</p>

		<h3>[method:this syncWith]( [param:AnimationAction otherAction] )</h3>
		<p>
      Sincronizza questa azione con l'altra azione passata. Questo metodo può essere concatenato.<br /><br />

      La sincronizzazione viene fatta impostando i valori [page:.time time] e [page:.timeScale timeScale]
      di questa azione ai corrispondenti valori dell'altra azione (interrompendo qualsiasi warping programmato).<br /><br />

      Nota: Le modifiche future di `time` e `timeScale` dell'altra azione non verranno rilevate.
		</p>

		<h3>[method:this warp]( [param:Number startTimeScale], [param:Number endTimeScale], [param:Number durationInSeconds] )</h3>
		<p>
      Modifica la velocità di riproduzione, entro l'intervallo di tempo passato, modificando 
      gradualmente il [page:.timeScale timeScale] da `startTimeScale` a `endTimeScale`. Questo metodo può essere concatenato.
		</p>


		<h2>Eventi</h2>


		<p class="desc">
      Ci sono due eventi che indicano quando un singolo ciclo dell'azione o l'intera azione è terminata. Si può rispondere ad essi con:
		</p>
		<code>
		mixer.addEventListener( 'loop', function( e ) { …} ); // properties of e: type, action and loopDelta
		mixer.addEventListener( 'finished', function( e ) { …} ); // properties of e: type, action and direction
		</code>

		<h2>Source</h2>

		<p>
			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
		</p>
	</body>
</html>
